package menus;

import herramientas.BitUtil;
import bitclub.Proveedor;
import bitclub.Tarifa;
import bitclub.Videojuego;
import java.util.Date;
import java.util.List;

/**
 * @author BIT COMPANY
 */
public class OpcionesVideojuegos {

    /**
     * Para dar de alta Videojuegos
     */
    public static Videojuego opcionVideojuegosDarAlta() {
        Videojuego videojuego;
        BitUtil.borra();

        //Cogemos todos los datos uno a uno
        System.out.println("NUEVO VIDEOJUEGO");
        System.out.println("____________________");

        String titulo = BitUtil.dameCadenaNoVacio("Titulo: ", 50);
        String genero = BitUtil.dameCadena("Genero: ", 20);
        int ano = BitUtil.dameEntero("Año: ");
        int clasificacionEdad = BitUtil.dameEntero("Class.Edad: ");

        //Seleccionar proveedor:
        Proveedor proveedor = OpcionesProveedores.seleccionarProveedor();

        //Seleccionar tarifa:
        Tarifa tarifa = null;
        do {
            tarifa = OpcionesTarifas.seleccionarTarifa(false);
            if (tarifa == null) {
                System.out.println("La tarifa es obligatoria");
            }
        } while (tarifa == null);
        
        BitUtil.borra();
        String plataforma = BitUtil.dameCadena("Plataforma: ", 20);
        String productora = BitUtil.dameCadena("Productora: ", 20);

        videojuego = new Videojuego(titulo, genero, ano, clasificacionEdad, true, new Date(), null, proveedor, tarifa, 0, true, plataforma, productora);
        videojuego.nuevo();

        return videojuego;
    }

    /**
     * Ver datos de un artículo
     * @param articulo 
     */
    public static void opcionVideojuegosVer(Videojuego articulo) {
        BitUtil.borra();
        System.out.println(articulo.toString());
        BitUtil.esperaEnter();
    }

    /**
     * Para editar un artículo
     * @param articulo 
     */
    public static Videojuego opcionVideojuegosEditar(Videojuego videojuego) {

        Videojuego copia = new Videojuego(videojuego.getId(), videojuego.getTitulo(),
                videojuego.getGenero(), videojuego.getAno(), videojuego.getClasificacionEdad(),
                videojuego.isActivo(), videojuego.getFechaAlta(), videojuego.getFechaBaja(),
                videojuego.getProveedor(), videojuego.getTarifa(), videojuego.getVecesAlquilada(),
                videojuego.isDisponible(), videojuego.getPlataforma(), videojuego.getProductora());

        int respuesta = 0;
        boolean algunCambio = false;

        do {
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("EDITAR VIDEOJUEGO", new String[]{"Titulo", "Genero", "Año", "Clasificacion Edad", "Tarifa", "Proveedor", "Plataforma", "Productora"});
            System.out.println("\n");
            switch (respuesta) {
                case 1:
                    System.out.println("Titulo: " + videojuego.getTitulo());
                    videojuego.setTitulo(BitUtil.dameCadena("Nuevo Titulo: ", 50));
                    algunCambio = true;
                    break;
                case 2:
                    System.out.println("Genero: " + videojuego.getGenero());
                    videojuego.setGenero(BitUtil.dameCadena("Nuevo Genero: ", 20));
                    algunCambio = true;
                    break;
                case 3:
                    System.out.println("Año: " + videojuego.getAno());
                    videojuego.setAno(BitUtil.dameEntero("Nuevo Año: "));
                    algunCambio = true;
                    break;
                case 4:
                    System.out.println("Class.Edad: " + videojuego.getClasificacionEdad());
                    videojuego.setClasificacionEdad(BitUtil.dameEntero("Nueva Class.Edad: "));
                    algunCambio = true;
                    break;
                case 5:
                    System.out.println("Tarifa: " + videojuego.getTarifa().getNombre());
                    Tarifa tarifa = OpcionesTarifas.seleccionarTarifa();
                    if (tarifa == null) {
                        System.out.println("\nNo se ha cambiado la tarifa\n");
                        BitUtil.esperaEnter();
                    } else {
                        videojuego.setTarifa(tarifa);
                        algunCambio = true;
                    }
                    break;
                case 6:
                    System.out.println("Proveedor: " + videojuego.getProveedor().getNombredeEmpresa());
                    videojuego.setProveedor(OpcionesProveedores.seleccionarProveedor());
                    algunCambio = true;
                    break;
                case 7:
                    System.out.println("Plataforma: " + videojuego.getPlataforma());
                    videojuego.setPlataforma(BitUtil.dameCadena("Nueva Plataforma: ", 20));
                    algunCambio = true;
                    break;
                case 8:
                    System.out.println("Productora: " + videojuego.getProductora());
                    videojuego.setProductora(BitUtil.dameCadena("Nueva Productora: ", 20));
                    algunCambio = true;
                    break;
            }
        } while (respuesta != 0);

        if (algunCambio) {
            BitUtil.borra();
            System.out.println(videojuego.toString());
            System.out.println("\n");
            boolean confirmar = BitUtil.dameConfirmacion("Desea guardar estos cambios? (S/N) ");
            if (confirmar) {
                videojuego.actualizar();
            } else {
                videojuego = copia;
            }
        }
        return videojuego;
    }

    /**
     * Da de baja un artículo o le da de alta si ya estaba de baja
     * @param articulo 
     */
    public static void opcionVideojuegosDarBaja(Videojuego videojuego) {
        boolean baja;

        BitUtil.borra();
        System.out.println(videojuego.toStringLinea());
        System.out.println("\n");

        if (videojuego.isActivo()) {
            baja = BitUtil.dameConfirmacion("Este videojuego esta ACTIVO quiere darle de baja? (S/N) ");
            if (baja) {
                videojuego.setFechaBaja(new Date());
                videojuego.setActivo(false);
                videojuego.setDisponible(false);
                videojuego.actualizar();
                System.out.println("\nEl videojuego ha sido dado de BAJA.\n");
                BitUtil.esperaEnter();
            }
        } else {
            baja = BitUtil.dameConfirmacion("Este videojuego esta DE BAJA quiere darle de alta? (S/N) ");
            if (baja) {
                videojuego.setActivo(true);
                videojuego.setDisponible(true);
                videojuego.setFechaBaja(null);
                videojuego.actualizar();
                System.out.println("\nEl videojuego ha sido dado de ALTA.\n");
                BitUtil.esperaEnter();
            }
        }

    }

    /**
     * Menú para seleccionar un artículo
     * PRINCIPAL > ARTICULOS > BUSCAR
     */
    public static Videojuego seleccionarVideojuego(boolean soloDisponibles) {
        Videojuego videojuego = null;
        String titulo;
        int respuesta;
        String opciones[];
        int seleccion;
        String noHay = soloDisponibles
                ? "No hay videojuegos con dicho criterio o no estan disponibles\n"
                : "No hay videojuegos con dicho criterio\n";

        do {
            BitUtil.borra();
            titulo = "";
            respuesta = BitUtil.muestraMenu("Seleccion de Videojuego", new String[]{"Por Código", "Por Año", "Por Género", "Por Título", "Todos"}, "No seleccionar ninguno");
            switch (respuesta) {
                case 1:
                    BitUtil.borra();
                    System.out.println(BitUtil.muestraSubrayado("Seleccion de Videojuego", "-") + "\n");
                    int codigo = BitUtil.dameEntero("Introduzca Codigo: ");
                    videojuego = Videojuego.seleccionarPorCodigo(codigo, soloDisponibles);
                    if (videojuego == null) {
                        System.out.println(noHay);
                        BitUtil.esperaEnter();
                    } else {
                        respuesta = 0;
                    }
                    break;
                case 2:
                    BitUtil.borra();
                    System.out.println(BitUtil.muestraSubrayado("Seleccion de Videojuego", "-") + "\n");
                    int ano = BitUtil.dameEntero("Introduzca año: ");
                    List<Videojuego> listVideojuego = (List) Videojuego.seleccionarPorAno(Integer.toString(ano), soloDisponibles);
                    if (listVideojuego.isEmpty()) {
                        BitUtil.borra();
                        System.out.println(BitUtil.muestraSubrayado("Seleccion de Videojuego", "-") + "\n");
                        System.out.println(noHay);
                        BitUtil.esperaEnter();
                    } else {
                        opciones = new String[listVideojuego.size()];
                        for (int i = 0; i < listVideojuego.size(); i++) {
                            opciones[i] = listVideojuego.get(i).getTitulo() + " (" + listVideojuego.get(i).getAno() + ")";
                        }
                        BitUtil.borra();
                        seleccion = BitUtil.muestraMenu("Seleccion de Videojuego", opciones, "Ninguna");
                        if (seleccion != 0) {
                            videojuego = listVideojuego.get(seleccion - 1);
                            respuesta = 0;
                        }
                    }
                    break;
                case 3:
                    BitUtil.borra();
                    System.out.println(BitUtil.muestraSubrayado("Seleccion de Videojuego", "-") + "\n");
                    String genero = BitUtil.dameCadena("Introduzca genero: ", 20);
                    listVideojuego = (List) Videojuego.seleccionarPorGenero(genero, soloDisponibles);
                    if (listVideojuego.isEmpty()) {
                        BitUtil.borra();
                        System.out.println(BitUtil.muestraSubrayado("Seleccion de Videojuego", "-") + "\n");
                        System.out.println(noHay);
                        BitUtil.esperaEnter();
                    } else {
                        opciones = new String[listVideojuego.size()];
                        for (int i = 0; i < listVideojuego.size(); i++) {
                            opciones[i] = listVideojuego.get(i).getTitulo() + " (" + listVideojuego.get(i).getAno() + ")";
                        }
                        BitUtil.borra();
                        seleccion = BitUtil.muestraMenu("Seleccion de Videojuego", opciones, "Ninguna");
                        if (seleccion != 0) {
                            videojuego = listVideojuego.get(seleccion - 1);
                            respuesta = 0;
                        }
                    }
                    break;
                case 4:
                    BitUtil.borra();
                    System.out.println(BitUtil.muestraSubrayado("Seleccion de Videojuego", "-") + "\n");
                    titulo = BitUtil.dameCadena("Introduzca titulo: ", 50);
                case 5:
                    listVideojuego = (List) Videojuego.seleccionarPorTitulo(titulo, soloDisponibles);
                    if (listVideojuego.isEmpty()) {
                        BitUtil.borra();
                        System.out.println(BitUtil.muestraSubrayado("Seleccion de Videojuego", "-") + "\n");
                        System.out.println(noHay);
                        BitUtil.esperaEnter();
                    } else {
                        opciones = new String[listVideojuego.size()];
                        for (int i = 0; i < listVideojuego.size(); i++) {
                            opciones[i] = listVideojuego.get(i).getTitulo() + " (" + listVideojuego.get(i).getAno() + ")";
                        }
                        BitUtil.borra();
                        seleccion = BitUtil.muestraMenu("Seleccion de Videojuego", opciones, "Ninguna");
                        if (seleccion != 0) {
                            videojuego = listVideojuego.get(seleccion - 1);
                            respuesta = 0;
                        }
                    }
                    break;

            }
        } while (respuesta != 0);

        return videojuego;
    }
}
